package aterrizar;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import utils.Rango;

public class Aeropuerto {

	private Ubicacion ubicacion;
	private String
		nombre,
		ciudad,
		provincia,
		pais;
	private Collection<HorarioDeAvion> aviones;
	
	public Aeropuerto() {
	
	}
	public Aeropuerto(String nombre, String ciudad, String provincia, String pais, Ubicacion ubicacion) {
		this.nombre = nombre;
		this.ciudad = ciudad;
		this.provincia = provincia;
		this.pais = pais;
		this.ubicacion = ubicacion;
		this.aviones = new ArrayList<HorarioDeAvion>();
	}
	
	public Aeropuerto(String ciudad, String pais, Ubicacion ubicacion) {
		this(ciudad, ciudad, null, pais, ubicacion);
	}

	public Ubicacion getUbicacion() {
		return ubicacion;
	}
	public String getNombre() {
		return nombre;
	}
	public String getCiudad() {
		return ciudad;
	}
	public String getProvincia() {
		return provincia;
	}
	public String getPais() {
		return pais;
	}
	
	public Collection<Avion> getAviones(Date fecha)
	{
		Collection<Avion> result = new ArrayList<Avion>();
		for (HorarioDeAvion horarioDeAvion : aviones) {
			if ( horarioDeAvion.getRangoFecha().abarca(fecha) )
				result.add(horarioDeAvion.getAvion());
		}
		return result;
	}


	public void agregarAvionDisponible(Avion avion, Rango<Date> rangoFecha) {
		HorarioDeAvion horarioDeAvion = new HorarioDeAvion(avion, rangoFecha);
		aviones.add(horarioDeAvion);
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((ciudad == null) ? 0 : ciudad.hashCode());
		result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
		result = prime * result + ((pais == null) ? 0 : pais.hashCode());
		result = prime * result
				+ ((provincia == null) ? 0 : provincia.hashCode());
		result = prime * result
				+ ((ubicacion == null) ? 0 : ubicacion.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof Aeropuerto))
			return false;
		final Aeropuerto other = (Aeropuerto) obj;
		if (ciudad == null) {
			if (other.ciudad != null)
				return false;
		} else if (!ciudad.equals(other.ciudad))
			return false;
		if (nombre == null) {
			if (other.nombre != null)
				return false;
		} else if (!nombre.equals(other.nombre))
			return false;
		if (pais == null) {
			if (other.pais != null)
				return false;
		} else if (!pais.equals(other.pais))
			return false;
		if (provincia == null) {
			if (other.provincia != null)
				return false;
		} else if (!provincia.equals(other.provincia))
			return false;
		if (ubicacion == null) {
			if (other.ubicacion != null)
				return false;
		} else if (!ubicacion.equals(other.ubicacion))
			return false;
		return true;
	}
	
	@Override
	public String toString() {
		String s = getCiudad() + " [" + getPais() + "]";
		return s;
	}

	public void setUbicacion(Ubicacion ubicacion) {
		this.ubicacion = ubicacion;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public void setCiudad(String ciudad) {
		this.ciudad = ciudad;
	}

	public void setProvincia(String provincia) {
		this.provincia = provincia;
	}

	public void setPais(String pais) {
		this.pais = pais;
	}
}
